#ifndef FUNCTIONBUTTON_H
#define FUNCTIONBUTTON_H

#include <QWidget>
#include <QGridLayout>
#include <QPushButton>
#include <QIcon>
#include <QLabel>
#include <QComboBox>

/**
 * @brief FunctionButton 类提供应用程序的主要功能按钮集合
 *
 * 该类只负责UI展示和用户交互，发出信号给Desktop类处理具体业务逻辑
 */
class FunctionButton : public QWidget
{
    Q_OBJECT
public:
    /**
     * @brief 构造函数
     * @param parent 父窗口指针
     */
    explicit FunctionButton(QWidget *parent = nullptr);
    
    /**
     * @brief 析构函数
     */
    virtual ~FunctionButton();
    
    /**
     * @brief 设置按钮状态
     * @param enabled 是否启用
     */
    void setButtonsEnabled(bool enabled);
    
    /**
     * @brief 单独设置打开按钮的状态
     * @param enabled 是否启用
     */
    void enableOpenButton(bool enabled);
    
    /**
     * @brief 设置文件类型过滤器
     * @param filters 文件类型过滤器，如 "DAT Files (*.dat)"
     */
    void setFileFilters(const QString& filters);
    
    /**
     * @brief 获取最近文件列表
     * @return 文件路径列表
     */
    QStringList getRecentFiles() const;
    
    /**
     * @brief 添加文件到最近文件列表
     * @param filePath 文件路径
     */
    void addRecentFile(const QString& filePath);
    
    /**
     * @brief 更新最近文件下拉列表
     */
    void updateRecentFilesCombo();
    
    /**
     * @brief 验证最近文件列表中的文件是否有效
     * 移除不存在或无法访问的文件
     */
    void validateRecentFiles();

signals:
    /**
     * @brief 当用户选择文件后触发的信号
     * @param filePath 选中的文件路径
     */
    void sigFileSelected(QString filePath);
    
    /**
     * @brief 当用户点击清空按钮时触发的信号
     */
    void sigClearAll();
    
    /**
     * @brief 当用户点击刷新按钮时触发的信号
     */
    void sigRefresh();
    
    /**
     * @brief 当用户选择从最近文件列表中打开文件时触发的信号
     * @param filePath 选中的文件路径
     */
    void sigRecentFileSelected(QString filePath);
    
    /**
     * @brief 当用户点击导出按钮时触发的信号
     */
    void sigExport();
    
    /**
     * @brief 导出进度信号
     * @param progress 进度值（0-100）
     */
    void sigExportProgress(int progress);

public slots:
    /**
     * @brief 导入文件按钮点击事件处理
     */
    void onBtnOpenClicked();
    
    /**
     * @brief 清空按钮点击事件处理
     */
    void onBtnClearClick();
    
    /**
     * @brief 刷新按钮点击事件处理
     */
    void onBtnRefreshClick();
    
    /**
     * @brief 导出按钮点击事件处理
     */
    void onBtnExportClick();
    
    /**
     * @brief 最近文件选择事件处理
     * @param index 选中的索引
     */
    void onRecentFileSelected(int index);

private:
    /**
     * @brief 初始化用户界面
     */
    void initUI();
    
    /**
     * @brief 初始化按钮样式
     */
    void initButtonStyles();

private:
    QGridLayout* m_pLayout;       // 布局管理器
    QPushButton* m_pBtnOpen;      // 导入文件按钮
    QPushButton* m_pBtnClear;     // 清空按钮
    QPushButton* m_pBtnRefresh;   // 刷新按钮
    QPushButton* m_pBtnExport;    // 导出按钮
    QLabel* m_pLabelRecent;       // 最近文件标签
    QComboBox* m_pComboRecentFiles; // 最近文件下拉列表
    
    QStringList m_recentFiles;    // 最近打开的文件列表
    QString m_fileFilters;        // 文件类型过滤器
    
    static const int MAX_RECENT_FILES = 10; // 最大最近文件数量
};

#endif // FUNCTIONBUTTON_H
